/*
 * Copyright 2011 JBoss Inc
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.drools.informer;

import java.io.Serializable;

/**
 * A temporary object representing the answer to a question.
 * 
 * The answer is always a String since it models what the user has typed in.
 * 
 * When an Answer is inserted into the working memory, the Tohu built-in rules automatically converts copies the value onto the
 * corresponding Question (converting the data type as necessary). The Answer is then retracted from the working memory. If the
 * data type conversion fails then an InvalidAnswer object is asserted.
 * 
 * @author Damon Horrell
 */
public class Answer implements Serializable {

	private static final long serialVersionUID = 1L;

	private String questionId;

    private String questionType;

    private String questionContext;

	private String value;
    
    private String source;

	public Answer() {
	}

    
    public Answer(String type, String context, String value, String source) {
        this.questionId = null;
        this.questionType = type;
        this.questionContext = context;
        this.value = value;
        this.source = source;
    }

    public Answer(String type, String context, String value) {
        this.questionId = null;
        this.questionType = type;
        this.questionContext = context;
        this.value = value;
    }

	public Answer(String questionId, String value) {
		this.questionId = questionId;
		this.value = value;
	}

	public String getQuestionId() {
		return questionId;
	}

	public void setQuestionId(String questionId) {
		this.questionId = questionId;
	}

	public String getValue() {
		return value;
	}

	@Deprecated
	public void setvalue(String value) {
		this.value = value;
	}

	public void setValue(String value) {
		this.value = value;
	}


    public String getSource() {
        return source;
    }

    public void setSource(String source) {
        this.source = source;
    }

    /**
	 * @see Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((questionId == null) ? 0 : questionId.hashCode());
		return result;
	}

	/**
	 * @see Object#equals(Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final Answer other = (Answer) obj;
		if (questionId == null) {
			if (other.questionId != null)
				return false;
		} else if (!questionId.equals(other.questionId))
			return false;
		return true;
	}


    @Override
    public String toString() {
        return "Answer{" +
                "questionId='" + questionId + '\'' +
                ", questionType='" + questionType + '\'' +
                ", questionContext='" + questionContext + '\'' +
                ", value='" + value + '\'' +
                '}';
    }

    public String getQuestionType() {
        return questionType;
    }

    public void setQuestionType(String questionType) {
        this.questionType = questionType;
    }

    public String getQuestionContext() {
        return questionContext;
    }

    public void setQuestionContext(String questionContext) {
        this.questionContext = questionContext;
    }
}
